﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using com.clinica.business.BE.gesliq;
using LiclUtil;
using LiclGesLiq.Views;
using System.Text;

namespace wesiGestClinica.gesliq
{
    public partial class FormsConBandejaLiquidacion : Shared.SMGPaseBase, ILiclBandejaLiquidacion
    {
        private LiclBandejaLiquidacionPresenter oPresenter = new LiclBandejaLiquidacionPresenter();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                oPresenter.View = this;
                string Num = string.Empty;
                this.Master.TituloModulo = "Consulta Liquidaciones";
                CargarTipoDocumento();
                IniciarControles();
                Num = Request.QueryString["action"].ToString().Trim();
                oPresenter.onIniciar(int.Parse(Num));
            }
            Master.OcultarMensaje();
            oPresenter.View = this;
        }
        protected override void DefineHandlers()
        {
            img_Buscar.Click += new ImageClickEventHandler(img_Buscar_Click);
            btn_Buscar.Click += new EventHandler(btn_Buscar_Click);
            dg_Liquidaciones.RowCommand += new GridViewCommandEventHandler(dg_Liquidaciones_RowCommand);
            UCBarra1.img_Nuevo.Click += new ImageClickEventHandler(img_Nuevo_Click);
        }

        #region Eventos
        void dg_Liquidaciones_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Modificar")
            {
                string strUrl = string.Empty;
                string strScript = string.Empty;
                GridViewRow fila = (GridViewRow)((ImageButton)e.CommandSource).NamingContainer;
                dg_Liquidaciones.SelectedIndex = fila.RowIndex;
                string[] arr = e.CommandArgument.ToString().Split(new char[] { '|' });
                if (arr[0].ToString().Trim() != "0" && arr[1].ToString().Trim() != "0")
                {
                    if (Request.QueryString["action"].ToString().Trim() == "0")
                        strUrl = "FormsManGestionLiquidacion.aspx?action=2&TipoLiq=" + arr[0] + "&Num=" + arr[1];
                    else if (Request.QueryString["action"].ToString().Trim() == "1")
                        strUrl = "FormsManGestionLiquidacion.aspx?action=3&TipoLiq=" + arr[0] + "&Num=" + arr[1];
                    strScript = "window.location = '" + strUrl + "';";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "RedirectTo", strScript, true);
                }

            }
            if (e.CommandName == "Ver")
            {
                string strUrl = string.Empty;
                string strScript = string.Empty;
                GridViewRow fila = (GridViewRow)((ImageButton)e.CommandSource).NamingContainer;
                dg_Liquidaciones.SelectedIndex = fila.RowIndex;
                string[] arr = e.CommandArgument.ToString().Split(new char[] { '|' });
                if (arr[0].ToString().Trim() != "0" && arr[1].ToString().Trim() != "0")
                {
                    strUrl = "FormsManGestionLiquidacion.aspx?action=0&TipoLiq=" + arr[0] + "&Num=" + arr[1];
                    strScript = "window.location = '" + strUrl + "';";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "RedirectTo", strScript, true);
                }
            }
            if (e.CommandName == "Anular")
            {
                GridViewRow fila = (GridViewRow)((ImageButton)e.CommandSource).NamingContainer;
                dg_Liquidaciones.SelectedIndex = fila.RowIndex;
                string[] arr = e.CommandArgument.ToString().Split(new char[] { '|' });
                if (arr[0].ToString().Trim() != "0" && arr[1].ToString().Trim() != "0")
                {
                    LiquidacionBE oLiq = new LiquidacionBE();
                    oLiq.TipoLiquidacion = int.Parse(arr[0].ToString());
                    oLiq.Numero = int.Parse(arr[1].ToString());
                    oPresenter.onAnular_Liquidaciones(oLiq);
                    btn_Buscar_Click(null, null);
                }
            }
        }
        void img_Nuevo_Click(object sender, ImageClickEventArgs e)
        {
            string url = "FormsManGestionLiquidacion.aspx?action=1&TipoLiq=&Num=";
            string script = "window.location = '" + url + "';";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "RedirectTo", script, true);
        }

        void btn_Buscar_Click(object sender, EventArgs e)
        {
            if (ValidarBusqueda())
            {
                LiquidacionBE oLiq = new LiquidacionBE();
                PacienteBE oPac = new PacienteBE();
                oLiq.TipoLiquidacion = int.Parse(rbl_TipoDocumento.SelectedValue);
                oLiq.NumeroDocumento = txt_NumeroDocumento.Text.Trim();
                try
                {
                    PacienteBE oPaciente = new PacienteBE();
                    oPaciente.TipoBusqueda = 2;
                    oPaciente.NumeroDocumento = txt_NumeroDocumento.Text.Trim();
                    oPresenter.onBuscar_Paciente(oPaciente);
                    oLiq.Numero = int.Parse(txt_Numero.Text.Trim());
                }
                catch (Exception)
                {

                }
                oPac.NombreCompleto = txt_Paciente.Text.Trim();
                oPac.NumeroDocumento = txt_NumeroDocumento.Text.Trim();
                oLiq.Paciente = oPac;
                if (Request.QueryString["action"].ToString().Trim() != string.Empty)
                {
                    if (Request.QueryString["action"].ToString().Trim() == "0")
                        oPresenter.onObtener_Liquidaciones(oLiq, DateTime.Parse(UCFecDesde.Texto.Trim()), DateTime.Parse(UCFecHasta.Texto.Trim()));
                    else if (Request.QueryString["action"].ToString().Trim() == "1")
                        oPresenter.onObtener_Liquidaciones_Estado(oLiq, DateTime.Parse(UCFecDesde.Texto.Trim()), DateTime.Parse(UCFecHasta.Texto.Trim()));
                }
            }
        }
        void img_Buscar_Click(object sender, ImageClickEventArgs e)
        {
            txt_NumeroDocumento.Text = string.Empty;
            txt_Paciente.Text = string.Empty;
            PacienteBE oPaciente = new PacienteBE();
            oPaciente.TipoBusqueda = 2;
            if (txt_NumeroDocumento.Text.Trim() != string.Empty)
            {
                dg_Liquidaciones.DataSource = new List<LiquidacionBE>();
                dg_Liquidaciones.DataBind();
                oPaciente.NumeroDocumento = txt_NumeroDocumento.Text.Trim();
                oPresenter.onBuscar_Paciente(oPaciente);
            }
            else
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envio", "abrirPopupPaciente();", true);
            }
        }
        #endregion
        #region Metodos
        private void EstablecerModos(int modo)
        {
            switch (modo)
            {
                case 0:
                    UCBarra1.img_Nuevo.Visible = true;
                    UCBarra1.img_Volver.Visible = true;
                    break;
                case 1:
                    UCBarra1.img_Nuevo.Visible = false;
                    UCBarra1.img_Volver.Visible = false;
                    dg_Liquidaciones.Columns[9].Visible = false;
                    dg_Liquidaciones.Columns[10].Visible = false;
                    break;
            }
        }
        private void CargarTipoDocumento()
        {
            ParametrosBE oParm = new ParametrosBE();
            oParm.NombreTabla = "TIPLIQ1";
            oPresenter.onObterner_Tabla(oParm);
        }
        private void IniciarControles()
        {
            DateTime fechaHasta = new DateTime();
            DateTime fechaDesde = new DateTime();
            fechaDesde = DateTime.Now.AddDays(-7);
            fechaHasta = DateTime.Today.ToUniversalTime();
            UCFecDesde.Texto = fechaDesde.ToString("dd/MM/yyyy");
            UCFecHasta.Texto = fechaHasta.ToString("dd/MM/yyyy");
            if (rbl_TipoDocumento.Items.Count > 0)
                rbl_TipoDocumento.Items[0].Selected = true;

            List<LiquidacionBE> lst = new List<LiquidacionBE>();
            lst.Add(new LiquidacionBE());
            dg_Liquidaciones.DataSource = lst;
            dg_Liquidaciones.DataBind();
            //dg_Liquidaciones.Columns[8].Visible = false;
            //dg_Liquidaciones.Columns[9].Visible = false;
            //dg_Liquidaciones.Columns[10].Visible = false;
        }
        private void CargarPaciente(PacienteBE oPac)
        {
            if (oPac.NumeroDocumento.Trim() != string.Empty)
                txt_NumeroDocumento.Text = oPac.NumeroDocumento.Trim();
            if (oPac.NombreCompleto.Trim() != string.Empty)
                txt_Paciente.Text = oPac.NombreCompleto.Trim();
        }
        private bool ValidarBusqueda()
        {
            bool bolVal = true;
            StringBuilder strErrores = new StringBuilder();

            try
            {
                if (txt_Numero.Text != string.Empty)
                {
                    if (!ValidarCarateres(txt_Numero.Text.Trim(), 1))
                    { 
                        bolVal=false;
                        strErrores.Append(" Número invalido,");
                    }
                    if (bolVal)
                        if (!(Int32.Parse(txt_Numero.Text) >= 1000 && Int32.Parse(txt_Numero.Text) <= 9999))
                        {
                            bolVal = false;
                            strErrores.Append(" Correlativo documento esta fuera de rango estipulado en configuración,");
                        }
                        if (!ValidarCarateres(txt_Numero.Text.Trim(), 1))
                        {
                            bolVal = false;
                            strErrores.Append(" El número de documento solo pueden ser numéricos,");
                        }
                }                
            }
            catch (Exception)
            {
                

            }
            
            if (rbl_TipoDocumento.SelectedValue == string.Empty)
            {
                bolVal = false;
                strErrores.Append(" No existe tipos de documentos válidos,");
            }
                                             
            if (!(DateTime.Parse(UCFecDesde.TextoFecha.Text).Year >= 1900 && DateTime.Parse(UCFecDesde.TextoFecha.Text).Year <= DateTime.Now.Year))
            {
                bolVal = false;
                strErrores.Append(" La Fecha desde se encuentra fuera de Rango,");
            }
            if (DateTime.Compare(DateTime.Parse(UCFecHasta.Texto.Trim()), DateTime.Now) > 0)
            {
                bolVal = false;
                strErrores.Append(" La hasta desde se encuentra fuera de Rango,");
            }
            try
            {
                DateTime.Parse(UCFecDesde.Texto.Trim());
                DateTime.Parse(UCFecHasta.Texto.Trim());
            }
            catch (Exception ex)
            {
                bolVal = false;
                strErrores.Append(ex.Message.Trim());
            }
            if (bolVal)
            {
                if (DateTime.Compare(DateTime.Parse(UCFecDesde.Texto.Trim()), DateTime.Parse(UCFecHasta.Texto.Trim())) > 0)
                {
                    bolVal = false;
                    strErrores.Append(" La fecha hasta no puede se mayor que la fecha desde,");
                }
            }
            if (!bolVal)
            {
                Master.MostrarMensaje(strErrores.ToString(), TipoMensaje.Error);
            }
            return bolVal;
        }
        private bool ValidarCarateres(string texto, int tipo)
        {
            bool res = true;
            string validar = string.Empty;
            string cadena = string.Empty;
            if (texto.Trim() != string.Empty)
            {
                switch (tipo)
                {
                    case 0://Alfanumericos no caracteres especiales
                        cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ-0123456789";
                        break;
                    case 1://Solo numeros
                        cadena = "-0123456789";
                        break;
                    case 2://Solo Letras
                        cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
                        break;
                    case 3://Solo numeros y decimales
                        cadena = "-0123456789.";
                        break;
                    default:
                        break;
                }
                #region Validacion
                for (int i = 0; i < texto.Length; i++)
                {
                    validar = texto.Substring(i, 1);
                    if (cadena.IndexOf(char.Parse(validar)) == -1)
                    {
                        res = false;
                        break;
                    }
                }
                #endregion
            }
            else
                res = false;

            return res;
        }
        public bool HabilitarBotonesGrilla(string tipoLiq, string Estado, string Accion)
        {
            bool val = false;
            #region habilitar
            switch (Accion)
            {
                case "1": // Editar
                    if (tipoLiq == "2")
                    {
                        if (Estado == "2" || Estado == "5" || Estado == "6")
                            val = true;
                        else
                            val = false;
                    }
                    else
                        val = false;
                    break;
                case "2": // Anular
                    if (Estado != "1" && tipoLiq == "2")
                        val = true;
                    break;
                case "3": // Ver
                    val = true;
                    break;
                default:
                    break;
            }
            #endregion
            return val;
        }
        #endregion
        #region Implemntacion de Interface
        public void ObtenerTabla(List<ParametrosBE> lst)
        {
            rbl_TipoDocumento.DataSource = lst;
            rbl_TipoDocumento.DataValueField = "Codigo";
            rbl_TipoDocumento.DataTextField = "DescripcionCorta";
            rbl_TipoDocumento.DataBind();
        }

        public void BuscarPaciente(List<PacienteBE> lst)
        {
            if (lst.Count > 1)
            {
                //img_Buscar.Attributes.Add("onClick", "if(!abrirPopupPaciente())return false;");
                //ScriptManager.RegisterStartupScript(this, typeof(Page), "Envio", "abrirPopupPaciente();", true);
            }
            else if (lst.Count == 1)
                CargarPaciente(lst[0]);
        }

        public void ObtenerLiquidacion(List<LiquidacionBE> lst)
        {
            if (lst.Count > 0)
            {
                dg_Liquidaciones.DataSource = lst;
                dg_Liquidaciones.DataBind();
                lbl_Cantidad.Text = lst.Count.ToString() + " Registros(s) encontrados";
            }
            else
            {
                lst.Add(new LiquidacionBE());
                dg_Liquidaciones.DataSource = lst;
                dg_Liquidaciones.DataBind();
                Master.MostrarMensaje("No Existen   Liquidaciones o PreLiquidaciones para el criterio de busqueda", TipoMensaje.Advertencia);
                lbl_Cantidad.Text = "0 Registros(s) encontrados";
            }
        }
        #endregion
        #region Mostrar Mensaje
        public void MostrarMensajeError(string Mensaje)
        {
            Master.MostrarMensaje(Mensaje.Trim(), TipoMensaje.Error);
        }
        #endregion
        #region Aprobar Liquidacion
        public void CargarInicio(int accion)
        {
            if (accion == 0)
            {
                EstablecerModos(0);
                rbl_TipoDocumento.Enabled = true;
            }
            else if (accion == 1)
            {
                EstablecerModos(1);
                rbl_TipoDocumento.Enabled = false;
                rbl_TipoDocumento.SelectedValue = "2";

            }
        }
        #endregion
    }

}
